{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# Slider Demo\n",
    "\n",
    "\n",
    "Using the slider widget to control visual properties of your plot.\n",
    "\n",
    "In this example, a slider is used to choose the frequency of a sine\n",
    "wave. You can control many continuously-varying properties of your plot in\n",
    "this way.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 5 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.widgets import Slider, Button, RadioButtons\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "plt.subplots_adjust(left=0.25, bottom=0.25)\n",
    "t = np.arange(0.0, 1.0, 0.001)\n",
    "a0 = 5\n",
    "f0 = 3\n",
    "delta_f = 5.0\n",
    "s = a0 * np.sin(2 * np.pi * f0 * t)\n",
    "l, = plt.plot(t, s, lw=2)\n",
    "ax.margins(x=0)\n",
    "\n",
    "axcolor = 'lightgoldenrodyellow'\n",
    "axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)\n",
    "axamp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)\n",
    "\n",
    "sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0, valstep=delta_f)\n",
    "samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)\n",
    "\n",
    "\n",
    "def update(val):\n",
    "    amp = samp.val\n",
    "    freq = sfreq.val\n",
    "    l.set_ydata(amp*np.sin(2*np.pi*freq*t))\n",
    "    fig.canvas.draw_idle()\n",
    "\n",
    "\n",
    "sfreq.on_changed(update)\n",
    "samp.on_changed(update)\n",
    "\n",
    "resetax = plt.axes([0.8, 0.025, 0.1, 0.04])\n",
    "button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')\n",
    "\n",
    "\n",
    "def reset(event):\n",
    "    sfreq.reset()\n",
    "    samp.reset()\n",
    "button.on_clicked(reset)\n",
    "\n",
    "rax = plt.axes([0.025, 0.5, 0.15, 0.15], facecolor=axcolor)\n",
    "radio = RadioButtons(rax, ('red', 'blue', 'green'), active=0)\n",
    "\n",
    "\n",
    "def colorfunc(label):\n",
    "    l.set_color(label)\n",
    "    fig.canvas.draw_idle()\n",
    "radio.on_clicked(colorfunc)\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
